<?php


namespace app\controller;


use app\middleware\Check;
use app\model\GoodsConfModel;
use think\facade\Validate;
use think\Request;
use think\response\Json;
use think\validate\ValidateRule;
use think\facade\Cache;
/**商品套餐模板管理
 * Class Category
 * @package app\controller
 */
class GoodsConf
{
    protected $middleware = [Check::class];

    /**添加菜品
     * @param Request $request
     * @return Json
     */
    public function add(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['name'] = $request->post('name');
        $input['type'] = $request->post('type');
        // 参数校验
        $validate = Validate::rule([
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'type' => function ($value) {
                return in_array($value, ['1', '2'], true) ? true : '不合法数据';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsConfModel::add($input, $request->post('token'));
    }

    /**列表
     * @param Request $request
     * @return Json
     */
    public function list(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['limit'] = $request->post('limit');//每页显示数量
        $input['page'] = $request->post('page');//当前页
        $input['name'] = $request->post('name');
        $input['type'] = $request->post('type');
        $input['is_show'] = $request->post('is_show');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'name' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
            'type' => function ($value) {
                return in_array($value, ['','1', '2'], true) ? true : '不合法数据';
            },
            'is_show' => function ($value) {
                return in_array($value, ['','0', '1'], true) ? true : '不合法数据';
            }
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        return GoodsConfModel::list($input, $request->post('token'));
    }

    /**编辑菜品库存
     * @param Request $request
     * @return Json
     */
    public function editStock(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['id'] = $request->post('id');
        $input['stock'] = $request->post('stock');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'stock' => function ($value) {
                return abs(intval($value)) >= 1 ? true : '不合法数据';
            },
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsConfModel::editStock($input, $request->post('token'));
    }



    /**修改菜品上下架
     * @param Request $request
     * @return Json
     */
    public function changeShow(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['id'] = $request->post('id');
        $input['is_show'] = $request->post('is_show');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'is_show' => function ($value) {
                if ($value === null) {
                    return '缺少参数';
                } elseif (in_array($value, ['1', '0'], true)) {
                    return true;
                } else {
                    return '非法参数';
                }
            }
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        return GoodsConfModel::changeShow($input, $request->post('token'));
    }

    /**批量下架菜品
     * @param Request $request
     * @return Json
     */
    public function confMultiOff(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['ids'] = $request->post('ids');
        // 参数校验
        $validate = Validate::rule([
            'ids' =>  ValidateRule::isRequire(null, '缺少参数'),
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        return GoodsConfModel::confMultiOff($input, $request->post('token'));
    }

    /**获取单个菜品信息
     * @param Request $request
     * @return Json
     */
    public function getOnly(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsConfModel::getOnly($input, $request->post('token'));
    }

    /**编辑菜品
     * @param Request $request
     * @return Json
     */
    public function edit(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['id'] = $request->post('id');
        $input['name'] = $request->post('name');
        $input['type'] = $request->post('type');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'type' => function ($value) {
                return in_array($value, ['1', '2'], true) ? true : '不合法数据';
            },
            'name' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsConfModel::edit($input, $request->post('token'));
    }

    /**删除菜品
     * @param Request $request
     * @return Json
     */
    public function del(Request $request)
    {
        if (!request()->isPost()) return jsonFail('请采用正确的方式登录!');
        $input['id'] = $request->post('id');//财务id
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        return GoodsConfModel::del($input, $request->post('token'));
    }
    /**商户修改套餐列表
     * @param Request $request
     * @return Json
     */
    public function storeEditList(Request $request)
    {
        $token = $request->param('token');//token
//        $input['store_id'] = $request->post('store_id');//商户ID
        $input['id'] = $request->post('id');//ID
//        $input['type'] = $request->post('type');//1：荤菜 2素菜
        $input['name'] = $request->post('name');//名字
        $input['stock'] = $request->post('stock');//库存
        $input['status'] = $request->post('status');//1:正常 2：删除
        $input['is_show'] = $request->post('is_show');//1：上架 2：下架
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null, '缺少参数'),
            'status' => function($v) {
                return in_array($v, ['0','1'], true) ? true: '不合法参数';
            },
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'stock' => ValidateRule::isRequire(null, '缺少参数'),
            'is_show' => function($v) {
                return in_array($v, ['0','1'], true) ? true: '不合法参数';
            },
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return GoodsConfModel::storeEditList($token,$input['id'],$input);
    }

    /**商户获取套餐列表
     * @param Request $request
     * @return Json
     */
    public function storeGetList(Request $request)
    {
        $token = $request->param('token');//token
        $storeId = Cache::store('redis')->handler()->get($token);
        if (!$storeId) return jsonFail('获取商户信息失败');
        // 逻辑处理
        return GoodsConfModel::storeGetList($storeId);
    }

    /**商户添加套餐列表
     * @param Request $request
     * @return Json
     */
    public function storeAddList(Request $request)
    {
        $token = $request->param('token');//token
        $storeId = Cache::store('redis')->handler()->get($token);
        if (!$storeId) return jsonFail('获取商户信息失败');
        $input['store_id'] = $storeId;//每页显示数量
        $input['type'] = $request->post('type');//1：荤菜 2素菜
        $input['name'] = $request->post('name');//名字
        $input['stock'] = $request->post('stock');//库存
        $input['is_show'] = $request->post('is_show');//1：上架 2：下架
        // 参数校验
        $validate = Validate::rule([
            'store_id' => ValidateRule::isRequire(null, '缺少参数'),
            'type' => function($v) {
                return in_array($v, ['1','2'], true) ? true: '不合法参数';
            },
            'name' => ValidateRule::isRequire(null, '缺少参数'),
            'stock' => ValidateRule::isRequire(null, '缺少参数'),
            'is_show' =>  function($v) {
                return in_array($v, ['0','1'], true) ? true: '不合法参数';
            },
        ]);
        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        return GoodsConfModel::storeAddList($token,$input);
    }
}